暗号キーをたくさん作るーペアを探す

25 1月

RSAの暗号キーをたくさん作る必要があって、phpで書いてみました。あまり新しさはありません。下記は、100ペア作ります。最後に、作成したキーを、XMLで書き出します。

 

<?php

require_once 'Crypt/RSA.php';

//Generates the pair keys
function generate_key_pair()
{
   global $public_key,$private_key;

   $key_pair = new Crypt_RSA_KeyPair(1024);

//	$key_pair->generate(1024);

   //Returns public key from the pair
   $public_key = $key_pair->getPublicKey();

   //Returns private key from the pair
   $private_key = $key_pair->getPrivateKey();
}

//Check runtime errors
function check_error(&$obj)
{
   if ($obj->isError()){
      $error = $obj->getLastError();
      switch ($error->getCode()) {
      case CRYPT_RSA_ERROR_WRONG_TAIL :
         // nothing to do
         break;
      default:
         // echo error message and exit
         echo 'error: ', $error->getMessage();
         exit;
      }
   }
}




$xmlstr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<root>\n\n";

$total = 100;


for ($i = 0; $i < $total; $i++) {

$xmlstr = $xmlstr."<key>\n<number>$i</number>\n<public>";

generate_key_pair();

//get string represenation of the public key
$key = Crypt_RSA_Key::fromString($public_key->toString());
check_error($key);

$xmlstr = $xmlstr.$public_key->toString()."</public>\n<private>";



//Get string represenation of the private key
$key2 = Crypt_RSA_Key::fromString($private_key->toString());
check_error($key2);

$xmlstr = $xmlstr.$private_key->toString()."</private>\n</key>\n\n";



}

$xmlstr = $xmlstr."</root>\n";

//echo $xmlstr."\n";


$key_file = @fopen('key.txt','w');
$tmp = fwrite($key_file,$xmlstr);
@fclose(key_file);


?>

 

書き出したキーを見てみたら、最初の20文字ぐらいは同じでした(ちょっと驚きます)。もう一度実行して、再度キーを作ったら、別なキーを作成していました。きちんとランダムに作成しているようです。
公開鍵と秘密鍵のペアを探すコードも書きました。

 

<?php

$file = 'key.txt';

$keytxt = file_get_contents($file);

$keyxml = simplexml_load_string($keytxt);


$target_key = 'YTozOntpOjA7czoxMjg6IksoxLghImuW+UMssDbhDahFco801bKIfcOMfhTIKn/FoIdZLnoXc7e63oAFu25Cy4io9HEw6MCteonOc+fpjWTi6KQB/oDyAm23cHml3IAQpn92otOVZ0tuWCNszqpCY1/A3xXBHJ8pEZfQCw8Y1ORb1ovcd98aAjFAUsi+E9+QIjtpOjE7czo2NDoiRQA7NvHr5uGcl1JNSAM++TPp497ZlI+KRUB7NjEs5+Gcl1JNSAP+uDMo493Yk45JRH86NTAr5uDb1pGMh0L9dyI7aToyO3M6NjoicHVibGljIjt9';

for ($i = 0; $i < $keyxml->key->count(); $i++) {

if ($keyxml->key[$i]->public == $target_key) {
	echo $keyxml->key[$i]->number."\n";
}

}

?>

 

こんな長い文字列の一致を調べる時のcpu負荷は、どれぐらいのものでしょうか?時間はほぼゼロなのですが。